fajlovi prikačeni uz rok.U arhivi se nalaze: XML schema (.xsd), XML dokument (.xml), XQuery upit ili XPath putanja (.xq), SQl dump baze (.sql), visio 2003 dijagram (.vsd) ukoliko postoje takvi fajlovi vezani za zadatke.
XML: za sve fajlove je
provereno da li su dobro oformljeni, a ako postoji i xml fajl i schema,
xml fajl je validiran u odnosu na odgovarajuću šemu. Za kreiranje
fajlova, proveru forme, validaciju, XPath i XQuery izraze korišćen je
XML editor EditX http://www.editix.com/
SQL: baza je
napravljena u MySQL-u pa prema tome SQL kod može imati netipičnu
sintaksu ili funkcije različite od onih u knjizi. Upiti su provereni,
prema mom shvatanju zadataka, koji često nisu baš lako shvatljivi.
Najlakše je preko MySQLyog-a uraditi "restore from SQL dump" da bi
mogli da probate upite nad podacima. Alati: MySQL http://www.mysql.com, MySQOyog www.webyog.com
ProjektniTim (ŠifraProjekta, JMBG, NazivProjekta, ImePrezime, PeriodAngažovanja, ŠifraSektora, NazivSektora)
ŠifraProjekta, JMBG --> PeriodAngažovanja, ŠifraSektora, NazivSektora, NazivProjekta, ImePrezime
ŠifraProjekta --> NazivProjekta
JMBG --> ImePrezime, ŠifraSektora, NazivSektora
ŠifraSektora --> NazivSektora
NazivSektora --> ŠifraSektora
u relaciji R atribut R.B (R.A i R.B mogu biti složeni) funkcionalno zavisi od atributa R.A (R.A funkcionalno određuje R.B) ako za svaku vrednost R.A postoji jedna i samo jedna vrednost R.B
atribut R.B potpuno funkcionalno zavisi od atributa R.A ako funkcionalno zavisi od atributa R.A ali ne i od nekog pravog podskupa atributa R.A
determinanta je bilo koji prost ili složen atribut od koga neki drugi atribut u relaciji potpuno funkcionalno zavisi.
Relacija R je u Boyce-Codd ovoj normalnoj formi ako su sve determinante ujedno i kandidati za ključ relacije.
ŠifraProjekta --> NazivProjekta(D)
ŠifraSektora --> NazivSektora(D)
NazivSektora --> ŠifraSektora(D)
JMBG --> ImePrezime, ŠifraSektora, NazivSektora(D)
JMBG, ŠifraProjekta --> PeriodAngažovanja(D)(KK)
očigledno je da relacija nije u BC normalnoj formi. Dekompozicijom pri kojoj se iz relacije izvlače projekcije sa onim determinantama koje nisu kandidati za ključ, relacija se svodi na BCNF.
Projekat(ŠifraProjekta, NazivProjekta) jeste BCNF
ProjektniTim2(ŠifraProjekta, JMBG, ImePrezime, PeriodAngažovanja, ŠifraSektora, NazivSektora) nije BCNF (4D, 1KK)
dalje se dekomponuje relacija ProjektniTim2
Radnik(JMBG, ImePrezime, ŠifraSektora, NazivSektora) nije BCNF (3D, 1KK)
ProjektniTim3(ŠifraProjekta, JMBG, PeriodAngažovanja) jeste BCNF
dalje se dekomponuje relacija Radnik
Radnik2(JMBG, ImePrezime, ŠifraSektora) jeste BCNF
Sektor(ŠifraSektora, NazivSektora) jeste BCNF
Sektor(ŠifraSektora, NazivSektora)
Radnik(JMBG, ImePrezime, ŠifraSektora)
Projekat(ŠifraProjekta, NazivProjekta)
ProjektniTim(ŠifraProjekta, JMBG, PeriodAngažovanja)
A (A1#, A2)
B (B1#, B2, A1#)
AB2 (A1#, B1#)
C (A1#,C1#, C2)
D (A1#, D1)
E (A1#, E1)
F (A1#, F1)
G (A1#, G1)
CG1 (A1#, A1#, G1)
H (A1#,A1#, H1)
class A (extent As key A1#){
attribute string A1#;
attribute string A2;
relationship B AB1 inverse B :: BA1;
relationship set<Bgtt; AB2 inverse B :: BA2;
};
class C extends A{
attribute string C1#;
attribute string C2;
relationship set<G> CG1 inverse G :: GC1;
};
class D extends A{
attribute string D1;
relationship set<Ggtt; DG inverse G :: GD;
};
class G (key G1) {
attribute string G1;
relationship D GD inverse D :: DG;
relationship set<Cgtt; GC1 inverse C :: CG1;
};
class E extends C {
attribute string E1;
relationship H EH inverse H :: HE;
};
svodi se na definisanje semantičkog domena
CREATE DOMAIN Kol INTEGER (Kol > 5000 AND Kol < 50000 AND MOD(Kol,50)=0);
mogu se definisati preko sledeće četvorke <naziv atributa, domen, ograničenje, akcija>
| ATRIBUT | DOMEN | OGRANIČENJE |
|---|---|---|
| OCENA | INTEGER | OCENA > 5 AND OCENA <= 10 |
moguće je vezati vrednost jednog za vrednost drugog atributa u relaciji
CREATE INTEGRITY RULE Starost_smer FORALL Student (IF Studen.ŠSmera = 01 THEN Student.Starost < 28)
moguće je skazati bilo kakvo složeno ograničenje, pa i ono koje povezuje atribute iz različitih relacija
CREATE INTEGRITY RULE Ocene_smer FORALL Student (IF Studen.ŠSmera = 01 THEN EXISTS Prijava (Prijava.Ocena > 7 AND Student.BrInd + Prijava.BrInd AND Prijava.ŠifPred = Predmet.ŠifPred AND Predmet.NazivPredmeta = "Matematika"));
Spoljno spajanje se koristi kako bi se u rezultat spajanja uključili i oni redovi koji ne zadovoljavaju uslov spajanja.
Za ilustraciju ćemo koristiti sledeće tabele:
| ŠifraOdeljenja | NazivOdeljenja |
|---|---|
| 1 | Uprava |
| 2 | Računski centar |
| 3 | Proizvodnja |
| ŠifraRadnika | ImePrezime | ŠifraOdeljenja |
|---|---|---|
| 1000 | Pera Perić | 1 |
| 1001 | Marko Marković | 1 |
| 1002 | Žika Žikić | 2 |
| 1003 | Laza Lazić | 2 |
| 1004 | Petar Petrović |
omogućuje uključivanje u rezultujuću tabelu svih redova sa leve strane JOIN klauzule tako što se praznim redom proširuje tabela sa desne strane
Odeljenje LEFT OUTER JOIN Radnik USING(ŠifraOdeljenja)
| ŠifraOdeljenja | NazivOdeljenja | ŠifraRadnika | ImePrezime | ŠifraOdeljenja |
|---|---|---|---|---|
| 1 | Uprava | 1000 | Pera Perić | 1 |
| 1 | Uprava | 1001 | Marko Marković | 1 |
| 2 | Računski centar | 1002 | Žika Žikić | 2 |
| 2 | Računski centar | 1003 | Laza Lazić | 2 |
| 3 | Proizvodnja |
omogućuje uključivanje u rezultujuću tabelu svih redova sa desne strane JOIN klauzule tako što se praznim redom proširuje tabela sa leve strane
Odelenje RIGHT OUTER JOIN Radnik USING(ŠifraOdeljenja)
| ŠifraOdeljenja | NazivOdeljenja | ŠifraRadnika | ImePrezime | ŠifraOdeljenja |
|---|---|---|---|---|
| 1 | Uprava | 1000 | Pera Perić | 1 |
| 1 | Uprava | 1001 | Marko Marković | 1 |
| 2 | Računski centar | 1002 | Žika Žikić | 2 |
| 2 | Računski centar | 1003 | Laza Lazić | 2 |
| 1004 | Petar Petrović |
omogućuje uključivanje u rezultat svih redova leve i desne tabele, a tamo gde uslov spajanja nije ispunjen odgovrajuća strana je popunjena praznim poljima
Odelenje FULL OUTER JOIN Radnik USING(ŠifraOdeljenja)
| ŠifraOdeljenja | NazivOdeljenja | ŠifraRadnika | ImePrezime | ŠifraOdeljenja |
|---|---|---|---|---|
| 1 | Uprava | 1000 | Pera Perić | 1 |
| 1 | Uprava | 1001 | Marko Marković | 1 |
| 2 | Računski centar | 1002 | Žika Žikić | 2 |
| 2 | Računski centar | 1003 | Laza Lazić | 2 |
| 3 | Proizvodnja | |||
| 1004 | Petar Petrović |
Graf prethođenja tranaskcija se sastoji od čvorova koji predstavljaju transakcije i usmerenih grana koje prikazuju prethođenje transakcija. Kaže se da Transakcija Ti prethodi transakciji Tj u izvršenju S ako postoji operacija Oi transakcije Ti i operacija Oj transakcije Tj tako da je:
Pošto na grafu nema ciklusa izvršenje jeste konflikt serijabilno!
Pošto na grafu ima ciklusa izvršenje nije konflikt serijabilno!
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Model">
<xs:complexType>
<xs:sequence>
<xs:element name="Predmet" type="PredmetType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="jedinstveniBrojPredmeta">
<xs:selector xpath=".//Predmet"/>
<xs:field xpath="@BrojPredmeta"/>
</xs:unique>
</xs:element>
<xs:complexType name="PredmetType">
<xs:sequence>
<xs:element name="Akt" type="AktType" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="BrojPredmeta" type="xs:int" use="required"/>
<xs:attribute name="Opis" type="xs:string"/>
</xs:complexType>
<xs:complexType name="AktType">
<xs:attribute name="RBAkta" type="xs:ID" use="required"/>
<xs:attribute name="DatumPodnosenja" type="xs:date"/>
<xs:attribute name="KratakOpis" type="xs:string"/>
</xs:complexType>
</xs:schema>
<?xml version="1.0" encoding="utf-8"?> <Model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///D:/My%20FON/IV%20godina/I%20semestar/Baze%20podataka/BProkovi2008/maj2008/podA.xsd"> <Predmet BrojPredmeta="1" Opis="neki opis"> <Akt RBAkta="A11" DatumPodnosenja="2008-01-01" KratakOpis="neki kratak opis"/> <Akt RBAkta="A12" DatumPodnosenja="2008-01-01" KratakOpis="neki kratak opis"/> </Predmet> <Predmet BrojPredmeta="2" Opis="neki opis"> <Akt RBAkta="A21" DatumPodnosenja="2008-01-01" KratakOpis="neki kratak opis"/> <Akt RBAkta="A22" DatumPodnosenja="2008-01-01" KratakOpis="neki kratak opis"/> </Predmet> </Model>
<xs:unique name="jedinstveniBrojPredmeta">
<xs:selector xpath=".//Predmet"/>
<xs:field xpath="@BrojPredmeta"/>
</xs:unique>
select Naslov, Naziv, Tiraz, Cena from ALBUM join PRODUKCIJSKA_KUCA using(SifProdukcije) where Tiraz > 50000 or (Tiraz < 50000 and SajamskiPopust > 0.10)
select Naslov from ALBUM join DNEVNA_PRODAJA using(SifAlbuma) where (Datum, BrojPrimeraka) in (select Datum, min(BrojPrimeraka) from DNEVNA_PRODAJA group by Datum having min(BrojPrimeraka) = ( select max(najmanjaDnevnaProdaja) from (select Datum, min(BrojPrimeraka) as najmanjaDnevnaProdaja from DNEVNA_PRODAJA group by Datum)as unutrasnja))
create view ALBUMI_NA_POPUSTU (NazivProdukcijskeKuce, NazivPravca, UkBrProdPrimerakaBezPopusta, UkBrojProdPrimSaPopustom, UkPrihodOdProdaje, UkOdobrenPopust, ProsecanIznosPopusta) as select PRODUKCIJSKA_KUCA.Naziv, NazivPravca, sum(case when Datum<DatumOdobravanjaPopusta then BrojPrimeraka else 0 end), sum(case when Datum>=DatumOdobravanjaPopusta then BrojPrimeraka else 0 end), sum(case when Datum<DatumOdobravanjaPopusta then BrojPrimeraka*Cena else BrojPrimeraka*Cena*(1-SajamskiPopust) end), sum(case when Datum<DatumOdobravanjaPopusta then 0 else BrojPrimeraka*Cena*SajamskiPopust end), sum(SajamskiPopust)/count(SajamskiPopust) from PRODUKCIJSKA_KUCA join ALBUM using(SifProdukcije) JOIN MUZICKI_Pravac using(SifPravca) join DNEVNA_PRODAJA using(SifAlbuma) group by PRODUKCIJSKA_KUCA.Naziv,NazivPravca